home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_12_01 / smith / sfloat.hpp < prev    next >
C/C++ Source or Header  |  1993-11-08  |  2KB  |  98 lines

  1. // SFLOAT.HPP, Listing 1
  2.  
  3. #if !defined ( SFLOAT_DEFINED )
  4. #define SFLOAT_DEFINED
  5.  
  6. union conv
  7.    {
  8.    float f;
  9.    long l;
  10.    unsigned short s[2];
  11.    };
  12.  
  13. class sfloat
  14.    {
  15.  
  16. private:
  17.    // class data
  18.    static unsigned long fManSignMask;
  19.    static unsigned long fExpMask;
  20.    static unsigned long fManMask;
  21.    static unsigned short sfManSignMask;
  22.    static unsigned short ManSign;
  23.    static unsigned short Exp;
  24.    static unsigned short Man;
  25.    static unsigned short fBias;
  26.    static unsigned short sfBias;
  27.    static unsigned short fsfBias;
  28.    static unsigned short Signed;
  29.    static unsigned short fExpBits;
  30.    static unsigned short sfExpBits;
  31.    static unsigned short fManBits;
  32.    static unsigned short sfManBits;
  33.    static unsigned short fManSignBits;
  34.    static unsigned short sfManSignBits;
  35.    static unsigned short sfBits;
  36.    static unsigned short fManShift1;
  37.    static unsigned short fManShift2;
  38.    static unsigned short sfManShift;
  39.    static unsigned short fExpShift;
  40.    static unsigned short sfExpShift;
  41.    static unsigned short sfExpBitsMin;
  42.    static unsigned short sfExpBitsMax;
  43.    static union conv u;
  44.  
  45. protected:
  46.    // object instance data
  47.    unsigned short s;
  48.  
  49. public:
  50.    // constructors
  51.    sfloat();
  52.    sfloat( float );
  53.    sfloat( sfloat& sf );
  54.  
  55.    // conversion
  56.    operator float();
  57.  
  58.    // member function assignment operators
  59.    sfloat &operator+=( sfloat sf );
  60.    sfloat &operator-=( sfloat sf );
  61.    sfloat &operator*=( sfloat sf );
  62.    sfloat &operator/=( sfloat sf );
  63.  
  64.    // member function unary operators
  65.    sfloat operator+();
  66.    sfloat operator-();
  67.    sfloat operator++();
  68.    sfloat operator--();
  69.    sfloat operator++( int );
  70.    sfloat operator--( int );
  71.  
  72.    // friend function relational operators
  73.    friend int operator==( sfloat sf1, sfloat sf2 );
  74.    friend int operator>=( sfloat sf1, sfloat sf2 );
  75.    friend int operator<=( sfloat sf1, sfloat sf2 );
  76.    friend int operator>( sfloat sf1, sfloat sf2 );
  77.    friend int operator<( sfloat sf1, sfloat sf2 );
  78.    friend int operator!=( sfloat sf1, sfloat sf2 );
  79.  
  80.    // utility function
  81.    friend void sfloatrange(
  82.          unsigned short sfNumExpBits,
  83.          unsigned short sfSigned );
  84.  
  85.    };   // class sfloat
  86.  
  87. // non-member function math operators
  88. sfloat operator+( sfloat sf1, sfloat sf2 );
  89. sfloat operator-( sfloat sf1, sfloat sf2 );
  90. sfloat operator*( sfloat sf1, sfloat sf2 );
  91. sfloat operator/( sfloat sf1, sfloat sf2 );
  92.  
  93. #include <sfloat.inl>
  94.  
  95. #endif
  96.  
  97. // End of SFLOAT.HPP
  98.